package xdu.lz.stage3_classloader.chapter1;

import com.sun.org.apache.xpath.internal.SourceTree;

import java.util.Random;

/**
 * 主动使用类的分类
 */
class Obj {

    public static  int salary = 10;
    //被final修饰的静态变量访问时，不会初始化类，因为被final修饰的在被编译的时候已经放到常量池中了。
    public static final int salary2 = 10;

    //这个不同salary2，会被初始化。
    public static final int salary3 = new Random().nextInt(10000);

    static {
        System.out.println("Obj被初始化了..");
    }

    public static void getSalary() {
        System.out.println(Obj.salary);
    }


}

class ObjChild extends Obj {

    public static int age = 10;

    static {
        System.out.println("child被初始化了..");
    }


}

interface A {

    //接口中的变量默认就是public static final的
    public static final int a = 1;
}

public class ClassActiveUse  {

    static {
        System.out.println("启动类ClassActiveUse被初始化");
    }
    public static void main(String[] args) throws ClassNotFoundException {
        //1直接new
        //new Obj();
        //2 访问某个类或者接口的静态变量，或者对该静态变量进行赋值操作
        //System.out.println(A.a);
        //System.out.println(Obj.salary);
        //3调用静态方法
        //Obj.getSalary();
        //4反射某个类
        //Class.forName("xdu.lz.stage3_classloader.chapter1.Obj");
        //5初始化一个子类
       // System.out.println(ObjChild.age);
        //6启动类


        //不会被初始化的情况
        //1 引用父类的变量，子类不会被初始化
//        System.out.println(ObjChild.salary);
        //2 数组引用，Obj不会被初始化
//        Obj[] arr = new Obj[10];
        //3 被final修饰的静态变量，因为final修饰的会被编译器算出来，直接放入常量池。



    }
}
